//封装 vuex 子模块 user : 用来管理所有与用户相关的状态
//导入操作 token 的方法
import {
  getToken,
  setToken,
  removeToken,
  setTimeStamp
} from "@/utils/auth.js"
//导入登录接口
import {
  getInfoApi,
  loginApi
} from "@/api/user"
//导入获取/获取员工基本信息接口
import {
  getEmployeesApi
} from '@/api/employees'
const state = {
  //用来存储用户登录之后的 token
  token: getToken(),
  //保存用户信息
  userInfo: {}
}
const mutations = {
  //保存 token
  setToken(state, payload) {
    // token 保存在 cookie 中 & vuex 中
    //保存到 vuex 中
    state.token = payload
    //保存 cookie  中
    setToken(payload)
    //保存 token 产生的时间戳
    setTimeStamp()
  },
  //清除 token
  removeToken(state) {
    //从 vuex 中清除
    state.token = null
    //从 cookie 中清除
    removeToken()
  },
  //保存用户信息
  saveUserInfo(state, payload) {
    state.userInfo = payload
  },
  //清除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  //完成登出
  logout(context) {
    //删除 token
    context.commit('removeToken')
    //删除用户信息
    context.commit('removeUserInfo')
  },
  //完成登录
  //payload : 登录的信息
  async login(context, payload) {
    try {
      //调用登录接口
      console.log(payload);
      const res = await loginApi(payload)
      console.log(res);
      //保存 token 状态
      //判断返回的状态
      if (res.success) {
        const token = res.data
        context.commit('setToken', token)
      }
    } catch (err) {
      console.log(err.message)
      //把错误抛给 login/index.vue 中的登陆方法
      return Promise.reject(err)
    }
  },
  //获取用户信息
  async getUserInfo(context) {
    //发送请求到服务器
    const res = await getInfoApi()
    //再获取另一个部分的信息
    const baseRes = await getEmployeesApi(res.data.userId)
    //将两个接口的数据进行合并
    const result = {
      ...res.data,
      ...baseRes.data
    }
    // console.log(res.data);
    //保存用户信息
    context.commit('saveUserInfo', result)
    //埋一个地雷
    return result
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
